package pl.puntin.punclient.messages;

/**
 * Zwykla wiadomosc tekstowa.
 * 
 * @author kakus
 *
 */
public final class ChatMessage extends Message
{
	private static final int CHAT_MESSAGE_LENGHT = 256;
	
	public String text;
	
	public ChatMessage(final String text)
	{
		if(text.length() > 255)
			throw new IllegalArgumentException("Wiadomosc tekstowa dluzsza niz 255 znakow");
		
		this.text = text;
	}
	
	public ChatMessage()
	{
	}
	
	@Override
	public byte getType()
	{
		return MessageTypes.CHAT_MESSAGE;
	}

	/* (non-Javadoc)
	 * @see pl.puntin.punclient.messages.Message#getByteForm()
	 * 
	 * UWAGA NIE TESTOWANE !
	 */
	@Override
	public byte[] getByteForm()
	{
		byte[] byteForm = new byte[CHAT_MESSAGE_LENGHT];
		byteForm[0]=getType();
		
		for (int i = 1; i < (text.length()+1); i++)
		{
			byteForm[i] = (byte) text.charAt(i-1);
		}
		return byteForm;
	}
	
	@Override
	public int getLenght()
	{
		return CHAT_MESSAGE_LENGHT;
	}
	
	/**
	 * wiadomosc od serwera
	 * zgodnie z zalozeniem iz sklada sie ona z
	 * 
	 * |  byte        |  reszta		  | <- rozmiar
	 * [typ_wiadmosci][teskt_wiadmosci] <- zawartosc
	 * 
	 * @param rawMessage wiadmosc otrzymna z sieci
	 */
	@Override
	protected void yourDataIsReadyInitYourSelf(final byte[] data)
	{
		int textLenght = 1;
		for (; textLenght < data.length; textLenght++)
		{
			if(data[textLenght] == 0)
				break;
		}
		
		char[] ctext = new char[textLenght-1];
		for (int j = 0; j < ctext.length; j++)
		{
			ctext[j]=(char) data[j+1];
		}
		
		text = new String(ctext);
	}
}
